home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_1
/
poly_ws
< prev
next >
Wrap
Internet Message Format
|
1995-03-31
|
21KB
From: Wayne H Scott <wscott@ecn.purdue.edu>
Subject: v04i009: poly_ws - Polynomial routines v3.1, Part01/01
Newsgroups: comp.sources.hp48
Organization: Purdue University Engineering Computer Network
Followup-To: comp.sys.hp48
Approved: spell@seq.uncwil.edu
Checksum: 1208114809 (verify with brik -cv)
Submitted-by: Wayne H Scott <wscott@ecn.purdue.edu>
Posting-number: Volume 4, Issue 9
Archive-name: poly_ws/part01
[ This was reposted by me since the previous laplace programs (v04i008)
need these programs. -chris ]
BEGIN_DOC poly.doc
Here it is, my polynomial routines version 3.2
Changes from version 3.1:
- Faster PMUL
- RT now works with complex cooeffients
- various bug fixes
These routines are in the public domain, but I ask that if you use any of
them in one of your programs you give me credit. I am also
not responsible for any damage caused by these programs.
This package include the following programs.
TRIM Strip leading zeros from polynomial object.
IRT Invert root program. Given n roots it return a nth degree polynomial.
PDER Derivative of a polynomial.
RDER Derivative of a rational function.
PF Partial Fractions. (Handles multiple roots!)
FCTP Factor polynomial
RT Find roots of any polynomial
L2A Convert a list to an array and back.
PADD Add two polynomials
PMUL Multiply two polynomials.
PDIV Divide two polynomials.
EVPLY Evalulate a polynomial at a point.
COEF Given an equation return a polynomial list.
These programs are for the HP-48sx. I have a version of them that works
correctly on the HP-28. Send me mail if you want it.
I think people will find these very useful and work as I say, but if you
find any bugs please send me E-Mail. Comments are also welcome.
Some of these routines could be faster (PF, PMUL, ...) tell me if you know
how to speed them up.
_______________________________________________________________________________
Wayne Scott | INTERNET: wscott@en.ecn.purdue.edu
Electrical Engineering | BITNET: wscott%ea.ecn.purdue.edu@purccvm
Purdue University | UUCP: {purdue, pur-ee}!en.ecn.purdue.edu!wscott
_______________________________________________________________________________
These programs all work on polynomials in the follows form:
3*X^3-7*X^2+5 is entered as { 3 -7 0 5 }
Reasons why I use lists instead of arrays include:
* lists look better on the stack. (multi-line)
* The interactive stack can quickly put serveral items in a
list.
* Hitting EVAL will quickly return the elements on a list.
* the '+' key will add a element to the end or beginning of a list
or concat two lists
* Internally the main program that needs to be fast (BAIRS)
does 100% stack maniplations so speed of arrays vs. lists was
not a major issue.
* It would be easier for later releases to include symbolic
polynomials.
so going down the list...
The first program is FCTP. (factor polynomial)
When it is passed the cooeficients of a polynomial in a list it returns the
factor of that polynomal. ex:
1: { 1 -17.8 99.41 -261.218 352.611 -134.106 }
FCTP
3: { 1 -4.2 2.1 }
2: { 1 -3.3 6.2 }
1: { 1 -10.3 }
This tells us that X^5-17.8*X^4+99.41*X^3-261.218*X^2+352.611*X-134.106
factors to (X^2-4.2*X+2.1)*(X^2-3.3*X+6.2)*(X-10.3)
Neat!
The next program is RT. (Roots)
If given a polynmoial it return its roots. ex:
1: { 1 -17.8 99.41 -261.218 352.611 -134.106 }
RT
5: 3.61986841536
4: .58013158464
3: (1.65, 1.8648056199)
2: (1.65, -1.8648056199)
1: 10.3
Very Useful!
RT with work with complex cooeffients in the polynomial.
These programs use the BAIRS program which performs Bairstow's method of
quadratic factors and QUD with does the quadratic equation.
TRIM is used to strip the leading zeros from a polynomial list.
{0 0 3 0 7 } TRIM => { 3 0 7 }
RDER will give the derivative of a rational function.
ie. d x + 4 -X^2 - 8*x + 31
-- ------------- = --------------------------------
dx x^2 - 7*x + 3 x^4 - 14*x^3 + 55*x^2 - 42*x + 9
2: { 1 4 }
1: { 1 -7 3 }
RDER
2: { -1 -8 31 }
1: { 1 -14 55 -42 9 }
I don't know about you but I think it's useful.
IRT will return a polynomial whose roots you specify.
ie. If a transfer function has zeros at -1, 1 and 5 the function
is x^3 - 5*x^2 - x + 5
1: { -1 1 5 }
IRT
1: { 1 -5 -1 5 }
PDER will return the derivtive of a polynomial.
.ie The d/dx (x^3 - 5*x^2 - x + 5) = 3*x^2 - 10*x - 1
1: { 1 -5 -1 5 }
PDER
1: { 3 -10 -1 }
PF will do a partial fraction expansion on a transfer function.
.ie s + 5 1/18 5/270 2/3 1/9 2/27
----------------- = ----- + ----- - ------- - ------- - -----
(s-4)(s+2)(s-1)^3 (s-4) (s+2) (s-1)^3 (s-1)^2 (s-1)
2: { 1 5 }
1: { 4 -2 1 1 1 }
PF
1: { 5.5555e-2 1.85185e-2 -.6666 -.11111 -.074074 }
This program expects the polynomial of the numerator to be on level 2 and
a list with the poles to be on level 1. Repeated poles are suported but
they must be listed in order. The output is a list of the values of the
fraction in the same order as the poles were entered.
PADD, PMUL, and PDIV are all obvious, they take two polynomial lists off
the stack and perform the operation on them.
PDIV returns the polynomial and the remainder polynomial.
L2A converts a list to and array. (and back)
1: { 1 2 3 }
L2A
1: [ 1 2 3 ]
L2A
1: { 1 2 3 }
EVPLY evalutates and polynomial at a point.
x^3 - 3*x^2 +10*x - 5 | x=2.5 = 16.875
2: { 1 -3 10 -5 }
1: 2.5
EVPLY
1: 16.875
P.S. Many thanks to Mattias Dahl & Henrik Johansson for fixs they have
made.
END_DOC
BEGIN_RPL poly.rpl
%%HP: T(3)A(R)F(.);
DIR
PDIV
\<< DUP SIZE 3 ROLLD OBJ\-> \->ARRY SWAP OBJ\-> \->ARRY \-> c b a
\<< a b
IF c 1 SAME THEN
OBJ\-> DROP / OBJ\-> 1 GET \->LIST { 0 }
ELSE
WHILE
OVER SIZE 1 GET c \>=
REPEAT DIVV
END
DROP \-> d
\<< a SIZE 1 GET c 1 - - IF DUP NOT THEN
1 END \->LIST d OBJ\-> OBJ\-> DROP \->LIST
\>>
END
\>>
\>>
TRIM
\<< OBJ\-> \-> n
\<< n
WHILE ROLL DUP ABS NOT n 1 - AND
REPEAT DROP 'n' DECR
END n ROLLD
n \->LIST
\>>
\>>
RDER
\<< \-> F G
\<< G F
PDER PMUL G PDER {
-1 } PMUL F PMUL
PADD G G PMUL
\>>
\>>
IRT
\<< OBJ\-> \-> n
\<<
IF n 0
>
THEN 1
n
START
n ROLL { 1 } SWAP
NEG +
NEXT
ELSE {
1 }
END
IF n 1
>
THEN 2
n
START
PMUL
NEXT
END
\>>
\>>
PDER
\<< OBJ\-> \-> n
\<< 1 n
FOR i n
ROLL n i - *
NEXT
DROP
IF n 1
==
THEN {
0 }
ELSE n
1 - \->LIST
END
\>>
\>>
PF
\<< MAXR { }
\-> Z P OLD LAST
\<< 1 P
SIZE
FOR I P
I GET \-> p1
\<<
IF p1 OLD \=/
THEN Z p1 EVPLY 1 P
SIZE
FOR J
IF P J GET P I
GET \=/
THEN p1 P J GET
- /
END
NEXT p1 'OLD' STO
{ } 'LAST' STO
ELSE
IF { } LAST SAME
THEN 1 { } 1 P
SIZE
FOR K P K GET
IF DUP p1 ==
THEN DROP
ELSE +
END
NEXT IRT Z SWAP
ELSE LAST OBJ\->
DROP
END RDER DUP2 5
PICK 1 + 3 ROLLD 3
\->LIST 'LAST' STO p1
EVPLY SWAP p1 EVPLY
SWAP / SWAP ! /
END
\>>
NEXT P
SIZE \->LIST
\>>
\>>
FCTP
\<<
IF DUP
SIZE 3 >
THEN DUP
BAIRS SWAP OVER
PDIV DROP FCTP
END
\>>
RT
\<< TRIM DUP
SIZE \-> n
\<<
IF n 3
>
THEN
DUP BAIRS SWAP OVER
PDIV DROP \-> A B
\<< A
RT B RT
\>>
ELSE
IF n
2 >
THEN
QUD
ELSE
LIST\-> DROP NEG SWAP
/
END
END
\>>
\>>
L\178A
\<<
IF DUP
TYPE 5 ==
THEN OBJ\->
\->ARRY
ELSE OBJ\->
1 GET \->LIST
END
\>>
PADD
\<< DUP2 SIZE
SWAP SIZE \-> A B nB
nA
\<< A L\178A B
L\178A
IF nA
nB <
THEN
SWAP
END
IF nA
nB \=/
THEN 1
nA nB - ABS
START
0
NEXT
END nA
nB - ABS 1 + ROLL
OBJ\-> 1 GET nA nB -
ABS + \->ARRY + L\178A
\>>
\>>
PMUL
\<< DUP2 SIZE
SWAP SIZE \-> X Y ny
nx
\<<
1 nx ny + 1 - FOR I
0
NEXT
1 nx FOR I
1 ny FOR J
I J + 1 - ROLL
X I GET Y J GET * +
I J + 1 - ROLLD
NEXT
NEXT
{ }
1 nx ny + 1 - START
SWAP +
NEXT
\>>
\>>
EVPLY
\<< OVER
IF DUP
TYPE 5 ==
THEN SIZE
ELSE SIZE
1 GET
END \-> a r
n
\<< a 1 GET
IF n 1
>
THEN 2
n
FOR i
r * a i GET +
NEXT
END
\>>
\>>
COEF
\<< \-> E n
\<< 0 n
FOR I 0
'X' STO E EVAL 'X'
PURGE E 'X' \.d 'E'
STO I ! /
NEXT 2
n 1 +
FOR I I
ROLL
NEXT n
1 + \->LIST
\>>
\>>
EQ 1
DIVV
\<< DUP 1 GET \-> a
b c
\<< a 1 GET c /
DUP b * a SIZE RDM
a SWAP - OBJ\-> 1
GETI 1 - PUT \->ARRY
SWAP DROP b
\>>
\>>
QUD
\<< LIST\-> \->ARRY
DUP 1 GET / ARRY\->
DROP ROT DROP SWAP
2 / NEG DUP SQ ROT
- \v/ DUP2 + 3 ROLLD
-
\>>
BAIRS
\<< OBJ\-> 1 1 \-> n
R S
\<<
DO 0 n 1 +
PICK 0 0 0 4 PICK 5
n + 7
FOR J J
PICK R 7 PICK * + S
8 PICK * + 7 ROLL
DROP DUP 6 ROLLD R
3 PICK * + S 4 PICK
* + 5 ROLL DROP -1
STEP 3
PICK SQ 3 PICK 6
PICK * -
IF DUP 0
==
THEN DROP
1 1
ELSE 6
PICK 6 PICK * 5
PICK 9 PICK * -
OVER / 4 PICK 9
PICK * 8 PICK 7
PICK * - ROT /
END DUP
'S' STO+ SWAP DUP
'R' STO+
UNTIL (0,1) * +
ABS .000000001 < 7
ROLLD 6 DROPN
END n DROPN
1 R NEG S NEG 3
\->LIST
\>>
\>>
END
END_RPL
BEGIN_ASC poly.asc
%%HP: T(3)A(R)F(.);
"69A20FF7EE4100000050241494253550D9D20E1632B7FC19C2A29C2A21C432D6
E2010E6D6E201025D6E201035E16323C0324B2A2D6E2010E69C2A276BA1A9CF1
4B2A24B2A24B2A2803A2A9CF1D13A2D6E2010E676BA1743A20A132D6E2010A4D
6E2010A4A9CF1D6E201025743A2A9CF1EEDA176BA1D6E201035C53A2A9CF1EED
A176BA1743A25BCF18DBF178BF1233A20DCF1D6E2010253F2A2A9CF1EEDA176B
A1D6E201035803A2A9CF1EEDA176BA1D13A25BCF18DBF1683A2083323F2A2A9C
F1624B13F2A2A9CF1233A2A9CF1EEDA190DA13CE2278BF14B2A2279E1AFE22D9
D208DBF19C2A29C2A2B21305BF22D9D20233A2A9CF1233A2A9CF1EEDA1D13A2A
9CF1173A2A9CF1EEDA190DA192CF150FA1803A2A9CF1173A2A9CF1EEDA1C53A2
A9CF1743A2A9CF1EEDA190DA1E0CF150FA1B21305DF2278BF145632D6E201035
97632B4402DBBF178BF145632D6E20102597632B4402DE032779200000000000
0000000000000000000010EEDA176BA1F1AA1339201990000000000010EBBE17
43A20DCF1233A246CF19B632D6E2010E646CF19C2A2D6E201025599A1D6E2010
35599A13F2A2387C1EF53293632B2130E43003015554430D9D20E1632A59C190
0D178BF19C2A26C7D150FA1290D18DBF1E0CF18DBF1DBBF1ED2A250FA1599A17
8BF1624B1E0CF190DA1473B12ABF176BA13F2A20DCF190DA193632B213069000
404494656540D9D20E163278BF19C2A26C7D11C432D6E201016D6E201026D6E2
01036E1632D6E2010169C2A26C7D1D6E20103650FA178BF1D6E201026EEDA1D6
E2010168B9C1FD0D1D6E201016DBBF190DA1B7FC19C2A27C8D19C2A290DA1704
D1900D1DBBF18DBF1D6E201026EF53293632B21309E000205415203392000000
00000000010D10004034F4546440D9D20E16321C432D6E201054D6E2010E6E16
324B2A2D6E2010E60A132D6E2010944B2A24563284E20108597632DCC02D6E20
1054EB3A14563284E20108597632EFE02D6E2010544563284E20108597632E7F
E145632D6E20105497632DCC02D6E20109420BB150FA1C4232ED2A2D6E2010E6
9C2A276BA10A132D6E201094D6E2010945BCF1C4232D6E2010E69C2A276BA138
7C1EF53293632B21302410050546505C49550D9D20E163292CF13CE2278BF168
BC1D13A2279E1AFE228B9C15BF22D9D208B9C19C2A26C7D1B21305DF221C432D
6E201016D6E201027D6E2010E6E1632D6E2010169C2A26C7D13CE22D6E2010E6
9C2A2D5CE1AFE22D9D20ED2A2D6E2010E60A132D6E201096D6E201027EEDA1D6
E201016D6E2010966C7D176BA1C4232B21305DF22EF53293632B213012100400
5D455C440D9D20E16322ABF18B9C1DBBF18B9C11C432D6E201085D6E201095D6
E2020E697D6E2020E687E16329C2A2D6E2020E687D6E2020E69776BA19C2A290
DA10A132D6E2010944B2A2C42329C2A2D6E2020E6870A132D6E2010949C2A2D6
E2020E6970A132D6E2010A4D6E201094D6E2010A476BA19C2A290DA15BCF1D6E
201085D6E2010946C7D1D6E201095D6E2010A46C7D1EEDA176BA1D6E201094D6
E2010A476BA19C2A290DA10DCF1C4232C423247A20B21309C2A2D6E2020E687D
6E2020E69776BA19C2A290DA130132DBBF176BA1C4232EF53293632B2130FB10
0400514444440D9D20E16322ABF18B9C1DBBF18B9C11C432D6E201014D6E2010
24D6E2020E624D6E2020E614E1632D6E20101484E2030C42B14D6E20102484E2
030C42B143CE22D6E2020E614D6E2020E624EBBE1AFE22DBBF15DF223CE22D6E
2020E614D6E2020E624D9AE1AFE22D9D209C2A2D6E2020E614D6E2020E62490D
A1F1AA1301324B2A2C4232B21305DF22D6E2020E614D6E2020E62490DA1F1AA1
9C2A276BA15BCF1B7FC19C2A26C7D1D6E2020E614D6E2020E62490DA1F1AA176
BA1900D176BA184E2030C42B14EF53293632B21308A10030C42B1430D9D20E16
323CE2278BF168BC1D13A2279E1AFE22D9D20B7FC1900D1B21305BF22D9D20B7
FC19C2A26C7D1387C1B21305DF2293632B21308700020254520D9D20E163284E
2040452594D478BF18B9C11C432D6E2010E6E16323CE22D6E2010E63F2A2D5CE
1AFE22D9D2078BF184E20502414942535DBBF192CF184E2040054494658DBF11
C432D6E201014D6E201024E1632D6E20101484E20202545D6E20102484E20202
545EF532B21305BF22D9D203CE22D6E2010E6ED2A2D5CE1AFE2284E203015554
45BF22D9D20A59C18DBF1599A1DBBF150FA1B21305DF22B21305DF22EF532936
32B2130C5100406434450540D9D20E16323CE2278BF18B9C13F2A2D5CE1AFE22
D9D2078BF184E20502414942535DBBF192CF184E2040054494658DBF184E2040
64344505B21305DF2293632B21300900020056420D9D20E1632FDAA147A20B21
301C432D6E2010A5D6E201005D6E2030F4C444D6E2040C4143545E16329C2A2D
6E2010058B9C10A132D6E201094D6E201005D6E2010946C7D11C432D6E202007
13E16323CE22D6E20200713D6E2030F4C444D9AE1AFE22D9D20D6E2010A5D6E2
020071384E2050546505C4959C2A2D6E2010058B9C10A132D6E2010A43CE22D6
E201005D6E2010A46C7D1D6E201005D6E2010946C7D1D9AE1AFE22D9D20D6E20
200713D6E201005D6E2010A46C7D190DA150FA1B21305DF22C4232D6E2020071
345632D6E2030F4C44497632DCC0247A20B213045632D6E2040C414354597632
DCC02B21305BF22D9D203CE2247A20B2130D6E2040C4143545167E1AFE22D9D2
09C2A247A20B21309C2A2D6E2010058B9C10A132D6E2010B4D6E201005D6E201
0B46C7D13CE2278BF1D6E20200713279E1AFE228DBF15BF2276BA15DF22C4232
84E2030942545D6E2010A5DBBF1B21305BF22D9D20D6E2040C4143545B7FC18D
BF1B21305DF2284E2040254454252ABF1D13A2A9CF19C2A276BA13F2A20DCF13
F2A2387C145632D6E2040C414354597632DCC02D6E2020071384E2050546505C
495DBBF1D6E2020071384E2050546505C495DBBF150FA1DBBF120BB150FA1B21
305DF22EF532C4232D6E2010058B9C1387C1EF53293632B21302D30040054454
2540D9D20E1632B7FC11C432D6E2010E6E16329C2A2D6E2010E60A132D6E2010
96D6E2010E65BCF1D6E2010E6D6E20109690DA1EEDA1C42328DBF13CE22D6E20
10E69C2A2279E1AFE2247A204B2A2B21305BF22D9D20D6E2010E69C2A290DA13
87C1B21305DF22EF53293632B21305E0003094254530D9D20E1632B7FC11C432
D6E2010E6E16323CE22D6E2010E64B2A2D5CE1AFE22D9D209C2A2D6E2010E630
132D6E2010E65BCF147A209C2A2B2130DBBF1599A176BA1C4232B21305BF2247
A209C2A2B21305DF223CE22D6E2010E69C2A2D5CE1AFE22D9D20ED2A2D6E2010
E63013284E204005D455C4C4232B21305DF22EF53293632B2130211004025445
42540D9D20E16321C432D6E201064D6E201074E1632D6E201074D6E20106484E
20400544542584E204005D455C4D6E20107484E20400544542547A20683A2B21
3084E204005D455C4D6E20106484E204005D455C484E204005144444D6E20107
4D6E20107484E204005D455C4EF53293632B2130FE00040452594D440D9D20E1
632B7FC11C432D6E2010E6E1632D6E2010E6330325BCF178BF1F1AA1F88E1D6E
2010E69C2A290DA1387E1D5032D9D208DBF145632D6E2010E697632AA902B213
049632D6E2010E60DCF1D6E2010E6387C1EF53293632B21304C0004005449465
40D9D20E163278BF18B9C13F2A20DCF1B7FC1900D1DBBF1B7FC1900D11C432D6
E201036D6E201026D6E201016E1632D6E201016D6E2010263CE22D6E2010369C
2A2167E1AFE22D9D20B7FC18DBF150FA1B7FC19C2A26C7D1387C147A204B2A2B
2130B21305BF22D9D203303292CF18B9C19C2A26C7D1D6E201036B9DE1D50328
4E204044946565496328DBF11C432D6E201046E1632D6E2010168B9C19C2A26C
7D1D6E2010369C2A290DA190DA13CE2278BF1F88E1AFE229C2A25DF22387C1D6
E201046B7FC1B7FC18DBF1387C1EF532B21305DF22EF53293632B213042AE"
END_ASC
BYTES: #EA24h 2917
BEGIN_UU poly.uue
begin 644 poly
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
MV0(>-A),(VTN$Y@(!1QXVTN8"`4=M+A!@A.0"!%!$15)(+D``U53%U.8"
M`4=(+D``150D1:<"AJ.R$@-(+D``U53%U.8"`49(+D``U53%A.0"!%!!1$1M
M+A!PU.8"`4=(+D``U53%Y%\C.3:R$@/O`$!`)9741-#9`AXVLO<<P332Y@(!
M;AXVTN8"`6XS,%++'X?[\:$:C^C1Y@(!;LFBDM`:@^?1!2.=+8"]'U0VTN8"
M`6YY-J*:("LQ0&DC;2X0X`;-'VTN$.`V>!S^-9)C(RLQ0`P`!%!$258$G2W@
M82.'^X&;'/.B`LT?>\^1`!V]^['W'`G0$4PC;2X0,-;F`@%B;2X0$.9A(VTN
M$!#6Y@(!8L,NTN8"`6/)HA)V'OHNTMD">\^!O1\%K['W',FB8GP=@\=!IP*T
MHK(2`RLQ4/LBG2TP`R,I_(&;',FB8GP=;2X0,+;9'ETP@N0"!$1)5E:4-H*]
M'\$TTN8"`60>-M+F`@%AN,F1+"K&U]'F`@%CR:*2T!H)K3'L(H?[\8@>^BZ2
E+"K5+S)X'&TN$$"V]QQ[SX&]'X/'X5\C*S%0_2+^-9)C(RLQ`"LQ
`
end
END_UU
--
_______________________________________________________________________________
Wayne Scott | INTERNET: wscott@en.ecn.purdue.edu
Electrical Engineering | BITNET: wscott%ea.ecn.purdue.edu@purccvm
Purdue University | UUCP: {purdue, pur-ee}!en.ecn.purdue.edu!wscott